package cn.tedu.v2;


import java.io.*;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 聊天室     Version 1    功能：客户端发送文本给服务器端
 * 多人聊天室 Version 2     功能：N个客户端链接服务器---群聊
 *                        先决条件具备：统一网段    ----ipconfig   查IP   192
 *                                   关掉电脑所有的防火墙【杀毒软件】 ping 对方ip
 *
 *细节功能①：服务器启动，连接一个客户端，知道对方IP地址
 *          socket对象中： getInetAddress()  获取对象主机IP对象
 *          getHostAddress()       获取对方主机IP地址，打印出字符串
 *语法：  socket.getInetAddress().getHostAddress()
 *       从客户端发来的【socket】通讯类IP地址
 *       ②：多个客户端链接服务器端
 *       start()启动方法中：while(true){}   一直接受客户发来通讯socket
 *       问题：一旦有一个客户端连接成功---IO流：单项操作【客户】
 *
 */
public class Server  {
     private ServerSocket serverSocket;
     public Server(){
         try{
             serverSocket=new ServerSocket(5656);
        } catch(BindException e){
            System.out.println("端口号重复创建");
        } catch (IOException e){
            System.out.println("申请端口号失败...");
        }
    }
    public void start()  {
        BufferedReader  br  = null;
        Socket socket =null;
        try  {
            //2.多个客户端连接上服务器---服务器端一直等待客户端的连接
            while (true) {
                 System.out.println("-----等待客户端连接-----");
                 socket = serverSocket.accept();
                //卡住 --等一个客户端连接，如果连接成功，等同于一个客户端连接
                //知道客户端的：IP是多少
                 String ip = socket.getInetAddress().getHostAddress();
                 System.out.println(ip + "一个客户端连接成功了");

                 InputStream is = socket.getInputStream();
                 InputStreamReader isr =
                         new InputStreamReader(is, "UTF8");

                 br = new BufferedReader(isr);
                 String str = null;
                 while (true) {
                     str = br.readLine();
                     System.out.println("客户端说的话：" + str);
                }
            }
        }  catch (NullPointerException e) {
            System.out.println("IO流传输对象，" +
                    "有对象为null,立马核对，" +
                    "建议：查看try块中对象可能赋值为null");
        }  catch (UnsupportedEncodingException e) {
            System.out.println("客户端或服务器端：字符集不一致");
        }  catch (IOException e) {
            System.out.println("通讯过程当中，传输出现错误！");
        }  finally {
            if  (br != null)
                try {
                    br.close();
                }  catch (IOException e) {
                    System.out.println("结束通讯：关闭失败！");
                }
            if  (socket != null)
                try {
                    socket.close();
                }  catch (IOException e) {
                    System.out.println("通讯关闭失败");
                }

        }

    }


    public static void main(String[] args) {

         Server server=new Server();
          server.start();
    }
}

